package com.huiqiao.bus.controller;

import com.huiqiao.bus.domain.Rent;
import com.huiqiao.bus.service.ICheckService;
import com.huiqiao.bus.service.IRentService;
import com.huiqiao.bus.vo.CheckVo;
import com.huiqiao.sys.utils.DataGridView;
import com.huiqiao.sys.utils.ResultObj;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.Map;

/**
 * @Author: yanliwei@foolish
 * @CreateTime: 2024-12-18  14:50
 */

@RestController
@RequestMapping("/check")
public class CheckController {

    @Autowired
    private ICheckService checkService;

    @Autowired
    private IRentService rentService;

    @RequestMapping("checkRentExist")
    public Rent checkRentExist(String rentid){
        //出租单号不存在，返回⼀个null，出租单号存在，返回⼀个rent对象
        Rent rent = rentService.queryRentByRentId(rentid);
        return rent;
    }


    /**
     * 根据出租单号加载检查单的表单数据
     * @param rentid
     * @return
     */
    @RequestMapping("initCheckFormData")
    public Map<String,Object> initCheckFormData(String rentid){
        return this.checkService.initCheckFormData(rentid);
    }


    /*
    @RequestMapping("initCheckFormData")
    public CheckVo initCheckFormData(CheckVo checkVo) {
        // 验证输入参数
        if (checkVo == null || checkVo.getRentid() == null || checkVo.getRentid().isEmpty()) {
            // 可以在这里记录日志或抛出异常
            return null; // 或者返回一个错误状态的CheckVo对象
        }

        Rent rent = rentService.querCustomerByRentId(checkVo.getRentid());
        if (rent == null || StrUtil.isBlank(rent.getOpername()) || StrUtil.isBlank(rent.getCarnumber())) {
            // 当rent为null，或opername/carnumber为空时，返回null或错误状态的CheckVo
            return null; // 或者返回一个错误状态的CheckVo对象
        }

        // 组装checkVo对象
        checkVo.setCheckdate(new Date());
        checkVo.setOpername(rent.getOpername());
        checkVo.setRentid(rent.getRentid()); // 使用rent中的rentid，而不是重新生成
        checkVo.setCreatetime(rent.getCreatetime());

        // 注意：如果您确实需要生成一个新的检查单号，请在返回之前设置它，
        // 但请确保这与业务逻辑相符，并且不会覆盖rentid（除非这是您的意图）。
        // 例如：checkVo.setSomeOtherField(RandomUtils.createRandomStringUseTime(SysConstant.CAR_ORDER_CZ));

        return checkVo;
    }*/


    /**
     * 保存检查单数据
     * @param checkVo
     * @return
     */
    @RequestMapping("saveCheck")
    public ResultObj saveCheck(CheckVo checkVo){
        try{
            checkVo.setCreatetime(new Date());
            this.checkService.addCheck(checkVo);
            return ResultObj.ADD_SUCCESS;
        }catch (Exception e){
            e.printStackTrace();
            return ResultObj.ADD_ERROR;
        }
    }


   /* @RequestMapping("saveCheck")
    public ResultObj saveCheck(CheckVo checkVo) {
        //更改出租单状态
        //更改为已归还
        RentVo rentVo = (RentVo) rentService.querCustomerByRentId(checkVo.getRentid());
        rentVo.setRentflag(Double.valueOf(SysConstant.RENT_BACK_TRUE));
        rentService.updateRent(rentVo);

        //更改汽车状态
        //更改汽车状态为未出租
        CarVo carVo = (CarVo) carService.queryCustomerByCarNumber(rentVo.getCarnumber());
        carVo.setIsrenting(SysConstant.RENT_CAR_FALSE);
        carService.updateCar(carVo);
        try {
            this.checkService.saveCheck(checkVo);
            return ResultObj.STATUS_TRUE;
        }catch (Exception e){
            e.printStackTrace();
            return ResultObj.STATUS_FALSE;
        }

    }*/

    /**
     * 加载车辆列表返回DataGridView
     *
     * @param checkVo
     * @return
     */
    @RequestMapping("loadAllCheck")
    public DataGridView loadAllCheck(CheckVo checkVo) {
        return this.checkService.queryAllCheck(checkVo);
    }
    //删除检查单
    @RequestMapping("deleteCheck")
    public ResultObj deleteCheck(String checkid){
        try {
            this.checkService.deleteCheck(checkid);
            return ResultObj.STATUS_TRUE;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.STATUS_FALSE;
        }
    }

    //批量删除检查单
    @RequestMapping("deleteBatchCheck")
    public ResultObj deleteBatchCheck(String[] ids){
        try {
            this.checkService.deleteBatchCheck(ids);
            return ResultObj.STATUS_TRUE;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.STATUS_FALSE;
        }
    }

    //修改检查单
    @RequestMapping("updateCheck")
    public ResultObj updateCheck(CheckVo checkVo){
        try {
            this.checkService.updateCheck(checkVo);
            return ResultObj.STATUS_TRUE;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.STATUS_FALSE;
        }
    }



}
